package cn.skyclass.business
{
	/**
	 * 二维数组
	 */
	public class Array2D
	{
		/**
		 * 创建新实例
		 * @param colCount 二维数组的列数
		 * @param rowCount 二维数组的行数
		 */		
		public function Array2D(colCount:int=0, rowCount:int=0)
		{
			this.colCount = colCount;
			this.rowCount = rowCount;
			this.length = colCount * rowCount;
			
			this.rowsData = new Array(rowCount);
			for(var i:int=0; i<rowCount; i++){
				this.rowsData[i] = new Array(colCount);
			}
		}

		/**
		 * 二维数组的元素个数
		 */
		public var length:int;
		
		/**
		 * 二维数组的列数
		 */		
		public var colCount:int;
		
		/**
		 * 二维数组的行数
		 */		
		public var rowCount:int;
		
		
		/**
		 * 存储二维数组的全部数据，以行为主
		 */		
		public var rowsData:Array;
		
		
		/**
		 * 获取某行的数据
		 * @param rowIndex
		 * @return 
		 */		
		public function getRow(rowIndex:int):Array{
			return this.rowsData[rowIndex] as Array;
		}
		
		/**
		 * 获取某列的数据
		 * @param colIndex
		 * @return 
		 */		
		public function getCol(colIndex:int):Array{
			var arr:Array = new Array(rowCount);
			for(var i:int=0; i<rowCount; i++){
				var row:Array = this.getRow(i);
				arr[i] = row[colIndex];
			}
			return arr;
		}
		
		/**
		 * 获取某个元素的数据
		 * @param colIndex
		 * @param rowIndex
		 * @return 
		 */		
		public function getItem(colIndex:int, rowIndex:int):Object{
			return this.getRow(rowIndex)[colIndex];
		}
		
		/**
		 * 设置某个元素的数据
		 * @param colIndex
		 * @param rowIndex
		 * @param value
		 */		
		public function setItem(colIndex:int, rowIndex:int, value:Object):void{
			var row:Array = this.getRow(rowIndex);
			row[colIndex] = value;
		}
		
		/**
		 * 将某一行的数据合并为一个字符串
		 * @param rowIndex
		 * @param colSep
		 * @return 
		 */		
		public function joinRow(rowIndex:int, colSep:String=","):String{
			return this.getRow(rowIndex).join(colSep);
		}
		
		/**
		 * 将某一列的数据合并为一个字符串
		 * @param colIndex
		 * @param rowSep
		 * @return 
		 */		
		public function joinCol(colIndex:int, rowSep:String=","):String{
			return this.getCol(colIndex).join(rowSep);
		}
	
		/**
		 * 将整个数组的数据合并为一个字符串
		 * @param colSep
		 * @param rowSep
		 * @return 
		 */		
		public function join(colSep:String=",", rowSep:String=","):String{
			var arr:Array = new Array(rowCount);
			for(var i:int=0; i<rowCount; i++){
				arr[i] = this.getRow(i).join(colSep);
			}
			return arr.join(rowSep);
		}
		
		
	}
}